home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / dfÜ / bbs / daydreambbs / developer / dreamdoor / sas_c / example / stat.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-06  |  14.1 KB  |  297 lines

  1. /*
  2.  
  3.   ***********************************************************************
  4.  
  5.      InterActive Status door for DayDream BBS V1.00 By Hydra!
  6.  
  7.      Note that the code is not optimized to the maximum, because i
  8.      wanted to make it easy to read. I think this demonstrates well enough
  9.      how to use dreamdoor.library when coding doors for DayDream BBS.
  10.  
  11.      Sas/C 6.50 tells warnings because of those time_t things. I was
  12.      unable to fix them, sorry..
  13.  
  14.   ***********************************************************************
  15.  
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include <time.h>
  22. #include <proto/dddoor.h>
  23. #include <libraries/dddoor.h>
  24. #include <proto/exec.h>
  25. #include <proto/dos.h>
  26. #include <daydream.h>
  27. #include <exec/memory.h>
  28. #include <dos.h>
  29.  
  30. struct    Library    *DDBase;
  31. struct    DIFace    *d;
  32. struct    DDPointers *Pointers;
  33.  
  34. void ClearEntry(ULONG Suuda);
  35. void UpdateEntry(ULONG updateme);
  36. void HandleCAccess(ULONG, char *);
  37. ULONG CountNodes(struct NodeStruct *);
  38.  
  39. char BUFFER[2048];
  40.  
  41. int main(int argc, char *argv[])
  42. {
  43. UWORD CurrSelect=NULL;
  44. UWORD Exit=NULL;
  45. ULONG Answer=NULL;
  46.  
  47.     DDBase=(struct Library *)OpenLibrary("dreamdoor.library",1);
  48.     if(DDBase==NULL)
  49.     {
  50.         printf("Needs DreamDoor.library V1.00+ to run\n");
  51.         exit(10);
  52.     }
  53.     d=InitDoor(argv[1]);        /* Establish link with DD */
  54.  
  55.     if(d==NULL)
  56.         {
  57.         printf("Hey Asswipe, this program requires DayDream BBS!\n");
  58.         CloseLibrary(DDBase);
  59.             exit(10);
  60.         }
  61.  
  62.     Pointers = AllocMem(sizeof(struct DDPointers),MEMF_PUBLIC|MEMF_CLEAR);
  63.     InquirePointers(d,Pointers);
  64.  
  65.     if (!strcmp("?",Pointers->dp_DoorParams)) {
  66.     SendString(d,"           Selleri Statusdoor V1.0 for DayDream BBS by Hydra/Selleri!\n          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n                              Humanoid Invasion\n                               +358-81-5409139\n                                     24h    \n");
  67.     } else {
  68.  
  69.     SendString(d," p .--------------------.  .--------------------------------------------------.\n");
  70.     SendString(d,"| 1) General Info    |  |                                                  |\n");
  71.     SendString(d,"| 2) File Stats      |  |                                                  |\n");
  72.     SendString(d,"| 3) Msg Stats       |  |                                                  |\n");
  73.     SendString(d,"| 4) Board Info      |  |                                                  |\n");
  74.     SendString(d,"`--------------------'  |                                                  |\n");
  75.     SendString(d,"                        |                                                  |\n");
  76.     SendString(d," DD-Stats V1.0 By Hydra |                                                  |\n");
  77.     SendString(d," Cursor keys to select. |                                                  |\n");
  78.     SendString(d,"                        |                                                  |\n");
  79.     SendString(d," Q => Quit              |                                                  |\n");
  80.     SendString(d,"                        |                                                  |\n");
  81.     SendString(d,"                        |                                                  |\n");
  82.     SendString(d,"                        |                                                  |\n");
  83.     SendString(d,"                        |                                                  |\n");
  84.     SendString(d,"                        |                                                  |\n");
  85.     SendString(d,"                        |                                                  |\n");
  86.     SendString(d,"                        |                                                  |\n");
  87.     SendString(d,"                        |                                                  |\n");
  88.     SendString(d,"                        `--------------------------------------------------'\n");
  89.     UpdateEntry(0);
  90.  
  91.         while (Exit==0)
  92.         {
  93.          Answer=GetKey(d,HOTKEY_CURSOR);
  94.          switch (Answer)
  95.          {
  96.          case 0:
  97.          case 'q': /* q */
  98.      case 'Q': /* Q */
  99.      case 27:
  100.          Exit=1;
  101.      break;
  102.          case 251: /* Cursor down */
  103.            ClearEntry(CurrSelect);
  104.        CurrSelect++;
  105.          if (CurrSelect==4) CurrSelect=0;
  106.            UpdateEntry(CurrSelect);
  107.            break;
  108.          case 250: /* Cursor up */
  109.            ClearEntry(CurrSelect);
  110.        CurrSelect--;
  111.          if (CurrSelect==-1) CurrSelect=3;
  112.            UpdateEntry(CurrSelect);
  113.            break;
  114.      case '1': /* one */
  115.      if (CurrSelect==0) break;
  116.            ClearEntry(CurrSelect);
  117.        CurrSelect=0;
  118.            UpdateEntry(CurrSelect);
  119.            break;
  120.      case '2': /* two */
  121.      if (CurrSelect==1) break;
  122.            ClearEntry(CurrSelect);
  123.        CurrSelect=1;
  124.            UpdateEntry(CurrSelect);
  125.            break;
  126.      case '3': /* three */
  127.      if (CurrSelect==2) break;
  128.            ClearEntry(CurrSelect);
  129.        CurrSelect=2;
  130.            UpdateEntry(CurrSelect);
  131.            break;
  132.      case '4': /* four */
  133.      if (CurrSelect==3) break;
  134.            ClearEntry(CurrSelect);
  135.        CurrSelect=3;
  136.            UpdateEntry(CurrSelect);
  137.            break;
  138.     }
  139.  
  140.          if (Answer==0) Exit=1;
  141.  
  142.         }
  143.     SendString(d," p ");
  144. }
  145.         FreeMem(Pointers,sizeof(struct DDPointers));
  146.     CloseDoor(d);
  147.     CloseLibrary(DDBase);
  148.      exit(0);
  149. }
  150.  
  151. void ClearEntry(ULONG clearme)
  152. {
  153.   if (clearme==0) SendString(d,"H 1) General Info    ");
  154.   if (clearme==1) SendString(d,"H 2) File Stats      ");
  155.   if (clearme==2) SendString(d,"H 3) Msg Stats       ");
  156.   if (clearme==3) SendString(d,"H 4) Board Info      ");
  157. }
  158.  
  159. void UpdateEntry(ULONG updateme)
  160. {
  161. char confbuf[48];
  162. char buffer2[48];
  163. char clean[2]=" ";
  164. time_t callinfo;
  165. struct InfoData info;
  166. struct DayDream_User *UserOnLine;
  167. ULONG lrp;
  168. ULONG freefast;
  169. UserOnLine=Pointers->dp_CurrUser;
  170.  
  171.   if (updateme==0) 
  172.   {
  173.     SendString(d,"H 1) GENERAL INFO    ");
  174.         sprintf(BUFFER,"7HReal Name %-36.36s7HHandle    %-36.36s",UserOnLine->user_realname,UserOnLine->user_handle);
  175.     SendString(d,BUFFER);
  176.         sprintf(BUFFER,"7HLocation  %-36.36s7HOrganizat.%-36.36s",UserOnLine->user_zipcity,UserOnLine->user_organization);
  177.     SendString(d,BUFFER);
  178.         sprintf(BUFFER,"7HPhone     %-36.36s7H%-48.48s",UserOnLine->user_voicephone,clean);
  179.     SendString(d,BUFFER);
  180.     callinfo=UserOnLine->user_firstcall+252460800;
  181.     sprintf(BUFFER,"7HFirst Call     %s8H       ",(ULONG)ctime((time_t)&callinfo));
  182.     SendString(d,BUFFER);
  183.     callinfo=Pointers->dp_Lastcall+252460800;
  184.     sprintf(BUFFER,"7HLast Call      %s8H       27HCalls          %-30d",(ULONG)ctime((time_t)&callinfo),(UWORD)UserOnLine->user_connections);
  185.     SendString(d,BUFFER);
  186.     sprintf(BUFFER,"27H%-48.48s27HTime Left/Limit%4d %4d mins            27H%-48.48s",clean,UserOnLine->user_timeremaining,UserOnLine->user_dailytimelimit,clean);
  187.     SendString(d,BUFFER);
  188.     sprintf(BUFFER,"27HBPS Rate   %-36d27H%-48.48s27HConf Access :%-36.36s",Pointers->dp_BpsRate,clean,clean);
  189.     SendString(d,BUFFER);
  190.     HandleCAccess(UserOnLine->user_conferenceacc1,confbuf);
  191.     sprintf(BUFFER,"27H%-48.48s",confbuf);
  192.     SendString(d,BUFFER);
  193.     HandleCAccess(UserOnLine->user_conferenceacc2,confbuf);
  194.     sprintf(BUFFER,"27H%-48.48s",confbuf);
  195.     SendString(d,BUFFER);
  196.   }
  197.  
  198.   if (updateme==1)
  199.   {
  200.      SendString(d,"H 2) FILE STATS      ");
  201.      if (UserOnLine->user_fileratio==0) { strcpy(confbuf,"None"); } else { sprintf(confbuf,"1:%ld",(ULONG)UserOnLine->user_fileratio); }
  202.      if (UserOnLine->user_byteratio==0) { strcpy(buffer2,"None"); } else { sprintf(buffer2,"1:%ld",(ULONG)UserOnLine->user_byteratio); }
  203.          sprintf(BUFFER,"7HFile Ratio%-36s7HByte ratio%-36s7H%-48.48s",confbuf,buffer2,clean);
  204.          SendString(d,BUFFER);
  205.      sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_ulfiles,UserOnLine->user_ulbytes);
  206.      sprintf(buffer2,"%d files, %ld bytes",UserOnLine->user_dlfiles,UserOnLine->user_dlbytes);
  207.          sprintf(BUFFER,"7HUploads   %-36s7HDownloads %-36s7H%-48.48s",confbuf,buffer2,clean);
  208.          SendString(d,BUFFER);
  209.      sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_freedlfiles,UserOnLine->user_freedlbytes);
  210.          sprintf(BUFFER,"7H%-48.48s7HFree dl's %-32s    7H%-48s",clean,confbuf,clean);
  211.          SendString(d,BUFFER);
  212.      if (UserOnLine->user_fileratio==0) { strcpy(confbuf,"Unlimited"); } else { sprintf(confbuf,"%ld",(ULONG)(UserOnLine->user_fileratio*UserOnLine->user_ulfiles)-UserOnLine->user_dlfiles+UserOnLine->user_freedlfiles); }
  213.      if (UserOnLine->user_byteratio==0) { strcpy(buffer2,"Unlimited"); } else { sprintf(buffer2,"%ld",(ULONG)(UserOnLine->user_byteratio*UserOnLine->user_ulbytes)-UserOnLine->user_dlbytes+UserOnLine->user_freedlbytes); }
  214.          sprintf(BUFFER,"27HFiles left%-36s27HBytes left%-36s27H%-48.48s",confbuf,buffer2,clean);
  215.          SendString(d,BUFFER);
  216.      sprintf(confbuf,"%d files, %ld bytes",UserOnLine->user_fakedfiles,UserOnLine->user_fakedbytes);
  217.          sprintf(BUFFER,"27HFakes     %-36s27H%-48.48s",confbuf,clean);
  218.          SendString(d,BUFFER);
  219.  
  220.          getdfs(Pointers->dp_CurrentNode->ns_Currnode->MULTI_TEMPORARY,&info);
  221.      sprintf(BUFFER,"27HFree space on temp directory %11ld bytes",(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock);
  222.          SendString(d,BUFFER);
  223.          getdfs(Pointers->dp_CurrConf->CONF_ULPATH,&info);
  224.      sprintf(BUFFER,"27HFree space on ul directory   %11ld bytes27H%-48.48s27H%-48.48s",(info.id_NumBlocks - info.id_NumBlocksUsed)* info.id_BytesPerBlock,clean,clean);
  225.          SendString(d,BUFFER);
  226.  
  227.   }
  228.   if (updateme==2) 
  229.   {
  230.     lrp=GetLrp(d,Pointers->dp_CurrConf->CONF_NUMBER,Pointers->dp_CurrBase->MSGBASE_NUMBER);
  231.  
  232.     SendString(d,"H 3) MSG STATS       ");
  233.         sprintf(BUFFER,"7HPub msgs  %-36d7HPrv msgs  %-36d7H%-48s7HBase Information%-30s7H~~~~~~~~~~~~~~~~%-30s",UserOnLine->user_pubmessages,UserOnLine->user_pvtmessages,clean,clean,clean);
  234.     SendString(d,BUFFER);
  235.         sprintf(BUFFER,"7HTotal Messages %-32d",Pointers->dp_CurrBase->MSGBASE_HIGHEST-Pointers->dp_CurrBase->MSGBASE_LOWEST);
  236.     SendString(d,BUFFER);
  237.         sprintf(confbuf,"%ld (%ld unread)",lrp,Pointers->dp_CurrBase->MSGBASE_HIGHEST-lrp);
  238.     sprintf(BUFFER,"7H%-48s7HYour last read %-32s7H%-48s",clean,confbuf,clean);
  239.     SendString(d,BUFFER);
  240.         sprintf(confbuf,"%5d %5d",Pointers->dp_CurrBase->MSGBASE_LOWEST,Pointers->dp_CurrBase->MSGBASE_HIGHEST);
  241.     sprintf(BUFFER,"27H%-48s27HLowest/Highest %-32s27H%-48s",clean,confbuf,clean);
  242.     SendString(d,BUFFER);
  243.     if (Pointers->dp_CurrBase->MSGBASE_FN_TAG[0]==0) { strcpy(confbuf,"-"); } else { strcpy(confbuf,Pointers->dp_CurrBase->MSGBASE_FN_TAG); }
  244.     if (Pointers->dp_CurrBase->MSGBASE_FN_ZONE==0) { strcpy(buffer2,"-"); } else { sprintf(buffer2,"%d:%d/%d.%d",Pointers->dp_CurrBase->MSGBASE_FN_ZONE,Pointers->dp_CurrBase->MSGBASE_FN_NET,Pointers->dp_CurrBase->MSGBASE_FN_NODE,Pointers->dp_CurrBase->MSGBASE_FN_POINT); }
  245.         sprintf(BUFFER,"27HFidoTag   %-36s27HFidoAddr. %-36s27H%-48.48s",confbuf,buffer2,clean);
  246.     SendString(d,BUFFER);
  247.     if (Pointers->dp_CurrBase->MSGBASE_FN_ORIGIN[0]==0) { strcpy(confbuf,"-"); } else { strcpy(confbuf,Pointers->dp_CurrBase->MSGBASE_FN_ORIGIN); }
  248.         sprintf(BUFFER,"27HOrigin    : %-36s27H%-48.48s27H%-48.48s27H%-48.48s",clean,confbuf,clean,clean);
  249.     SendString(d,BUFFER);
  250.   }
  251.   if (updateme==3) { SendString(d,"H 4) BOARD INFO      ");
  252.         sprintf(BUFFER,"7HBBS Name  %-36s7HSysOp     %-36s7H%-48s7HNode Information%-30s7H~~~~~~~~~~~~~~~~%-30s",Pointers->dp_DayDream->CFG_BOARDNAME,Pointers->dp_DayDream->CFG_SYSOPNAME,clean,clean,clean);
  253.     SendString(d,BUFFER);
  254.     sprintf(BUFFER,"7HDTE Rate  %-8ld Node Number %2d %2d       ",Pointers->dp_Iodev->IOD_DTERATE,(UWORD)Pointers->dp_CurrentNode->ns_Nodenumber,(UWORD)CountNodes(Pointers->dp_NodeStructure));
  255.     SendString(d,BUFFER);
  256.     sprintf(BUFFER,"7HUnit      %-8ld Driver      %-13.13s",Pointers->dp_Iodev->IOD_UNIT,Pointers->dp_Iodev->IOD_NAME);
  257.     SendString(d,BUFFER);
  258.         sprintf(confbuf,"%ld secs",Pointers->dp_DayDream->CFG_IDLETIMEOUT);
  259.     sprintf(BUFFER,"7HTimeout   %-36s      27H%-48s",confbuf,clean);
  260.     SendString(d,BUFFER);
  261.     SendString(d,"27HFree Memory                                     27H~~~~~~~~~~~                                     27HChip           Fast            Total            ");
  262.     lrp=AvailMem(MEMF_CHIP); freefast=AvailMem(MEMF_FAST);
  263.     sprintf(BUFFER,"27H%-15ld%-16ld%-17ld27H%-48.48s",lrp,freefast,lrp+freefast,clean);
  264.     SendString(d,BUFFER);
  265.     sprintf(BUFFER,"27HCurrent Conference%-28s27H%-48.48s27H%-48.48s",Pointers->dp_CurrConf->CONF_NAME,clean,clean);
  266.     SendString(d,BUFFER);
  267.  }
  268. }
  269.  
  270.  
  271.  
  272. void HandleCAccess(ULONG Access, char * Destbuf)
  273. {
  274. UWORD i = 0;
  275. while (i!=32)
  276.  {
  277.   if (Access&(1L<<i)) { Destbuf[i]='X'; } else { Destbuf[i]='_'; }
  278.   i++;
  279.  }
  280.  Destbuf[i]=0;
  281. }
  282.  
  283. ULONG CountNodes(struct NodeStruct *Nodet)
  284. {
  285. struct NodeStruct *Node;
  286. ULONG i = 0;
  287. UWORD j = 0;
  288. Node=Nodet->ns_Next;
  289. while (j==0)
  290.  {
  291.    i++;
  292.    if (Node==0) j=1;
  293.    Node=Node->ns_Next;
  294.  }
  295.  return(i);
  296. }
  297.